{$CLEO .s}
{$INCLUDE_ONCE ../cleo_tester.inc}

script_name '0AD3'
test("0AD3 (string_format)", tests)
terminate_this_custom_script


function tests
    it("should format string", test1)
    it("should respect short string variable size", test2)
    it("should respect long string variable size", test3)
    it("should create long text", test4)
    
    return

    function test1
        string_format {buffer} 0@v {format} "" {args}
        assert_eqs(0@v, "")
    
        string_format {buffer} 0@v {format} "test" {args}
        assert_eqs(0@v, "test")
        
        string_format {buffer} 0@v {format} "char %c" {args} 0x41
        assert_eqs(0@v, "char A")
        
        string_format {buffer} 0@v {format} "int %d" {args} 3
        assert_eqs(0@v, "int 3")
        
        string_format {buffer} 0@v {format} "hex %x" {args} 0x123
        assert_eqs(0@v, "hex 123")
        
        string_format {buffer} 0@v {format} "num %0.1f" {args} 1.234
        assert_eqs(0@v, "num 1.2")
        
        string_format {buffer} 0@v {format} "str %s" {args} "text"
        assert_eqs(0@v, "str text")
    end
    
    function test2
        0@ = 0xAAAAAAAA
        1@ = 0xBBBBBBBB
        2@ = 0xCCCCCCCC
        
        string_format {buffer} 0@s {format} "some longer test text" {args}
        
        assert_eqs(0@s, "some lon") // clamped to size
        assert_eq(2@, 0xCCCCCCCC)
    end
    
    function test3
        0@ = 0xAAAAAAAA
        1@ = 0xBBBBBBBB
        2@ = 0xCCCCCCCC
        3@ = 0xDDDDDDDD
        4@ = 0xEEEEEEEE
        
        string_format {buffer} 0@v {format} "some longer test text" {args}
        
        assert_eqs(0@v, "some longer test") // clamped to size
        assert_eq(4@, 0xEEEEEEEE)
    end
    
    function test4
        0@ = allocate_memory {size} 64
        
        string_format {buffer} 0@ {format} "some longer test text" {args}

        assert_eqs(0@, "some longer test text") // not clamped
        free_memory 0@
    end
end
